package com.eonmind.user.dto;

import com.eonmind.common.contract.data.request.PageRequest;
import com.eonmind.common.contract.enums.user.UserNoticeStatus;
import com.mongoplus.annotation.ID;
import com.mongoplus.enums.IdTypeEnum;
import lombok.Data;
import lombok.ToString;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Xujie
 * @since 2025/6/1 13:34
 **/


public class UserNoticeDto {
    @Data
    @ToString
    public static class UserNoticePreferenceResponse {
        /**
         * 用户配置ID
         */
        private Long id;
        /**
         * 通知类型名称
         */
        private String noticeTypeName;
        /**
         * 通知类型描述
         */
        private String noticeTypeDesc;

        /**
         * 通知方式配置
         * 使用位运算表示不同通知方式的组合:
         * 1-站内信
         * 10-邮件
         * 100-短信
         * 例如:
         * 1 表示仅接收站内信
         * 11 表示接收站内信和邮件
         * 111 表示接收站内信、邮件和短信
         */
        private Integer userPreference;
    }

    @Data
    @ToString
    public static class UserNoticePreferenceUpdateRequest {
        /**
         * 用户配置ID
         */
        private Long id;

        /**
         * 通知方式配置
         * 使用位运算表示不同通知方式的组合:
         * 1-站内信
         * 10-邮件
         * 100-短信
         * 例如:
         * 1 表示仅接收站内信
         * 11 表示接收站内信和邮件
         * 111 表示接收站内信、邮件和短信
         */
        private Integer userPreference;
    }

    @Data
    @ToString
    public static class UserNoticeData {
        /**
         * 主键ID
         */
        @ID(type = IdTypeEnum.AUTO)
        private Long id;


        /**
         * 通知类型ID(关联通知类型表)
         */
        private Long noticeTypeId;

        /**
         * 通知类型名称
         */
        private String noticeTypeName;

        /**
         * 通知标题
         */
        private String noticeTitle;

        /**
         * 通知内容
         */
        private String noticeContent;

        /**
         * 通知标签列表
         */
        private List<NoticeTagData> noticeTags = new ArrayList<>();


        /**
         * 本条通知的状态
         * 0-未读
         * 1-已读
         */
        private Integer status = UserNoticeStatus.UN_READ.getCode();


        /**
         * 创建时间
         */
        private Long createTime;

        /**
         * 通知标签内部类
         */
        @Data
        public static class NoticeTagData {
            /**
             * 标签名称
             */
            private String tagName = "";

            /**
             * 标签样式
             * tag 的Type danger、success等
             */
            private String tagStyle = "";
        }
    }

    @Data
    @ToString
    public static class UserNoticePageRequest {
        /**
         * 通知类型ID
         */
        private Long noticeTypeId;
        /**
         * 通知状态
         */
        private Integer status;

        /**
         * 开始时间
         */
        private Long startTime;

        /**
         * 结束时间
         */
        private Long endTime;

        private PageRequest page = new PageRequest();
    }

    @Data
    @ToString
    public static class UserNoticeDelRequest {
        /**
         * 通知ID集合
         */
        private List<Long> ids;
    }

    @Data
    @ToString
    public static class UserNoticeStatusUpdateRequest {
        /**
         * 通知ID集合
         */
        private List<Long> ids;

    }
}
